package com.kun.common;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.hibernate.tool.hbm2ddl.SchemaExport;

/**
 * Hibernate操作的工具类
 * @author csdn
 */
public class HibernateUtils {
	private static SessionFactory factory;
	private static Configuration cfg;

	private HibernateUtils() {
	}

	static {
		cfg = new Configuration().configure();

		ServiceRegistry sr = new ServiceRegistryBuilder()
								.applySettings(cfg.getProperties())
								.buildServiceRegistry();
		
		factory = cfg.buildSessionFactory(sr);
	}
	
	/**
	 * 根据HBM文件生成建表脚本并直接在数据库中建好表
	 */
	public static void createTables(){
		SchemaExport se = new SchemaExport(cfg);
		
		se.setDelimiter(";")
			.setFormat(true)
			.setOutputFile("my-ddl.sql")
			.create(true, true);
	}

	/**
	 * 获取全局单例的SessionFactory实例。线程安全的。
	 * @return
	 */
	public static SessionFactory getSessionFactory() {
		return factory;
	}

	/**
	 * 打开一个Session实例。注意，Session是线程不安全的，每一次的持久化操作都得打开一个新的Session，用完就关闭。
	 * @return
	 */
	public static Session getSession() {
		return factory.openSession();
	}
	
	/**
	 * 关闭指定的Session实例
	 * @param session
	 */
	public static void close(Session session){
		if(session != null){
			session.close();
		}
	}
}
